import ast
from asyncore import write

from Student import Student

class StudentManager():
    # 定义属性，保存学员信息
    def __init__(self):
        self.students = []

    # 定义一个menu()方法，用于打印系统菜单
    @staticmethod
    def menu():  # 注意：静态方法中，不能定义self
        print('-' * 30)
        print('欢迎使用小伟的学员管理系统')
        print('[1] 添加学员信息')
        print('[2] 删除学员信息')
        print('[3] 修改学员信息')
        print('[4] 查询学员信息')
        print('[5] 遍历所有学员信息')
        print('[6] 保存数据到文件')
        print('[7] 退出系统')
        print('-' * 30)

    # 定义添加学员信息的函数
    def add_student(self):
        # 接受要添加学员的信息
        name = input('请输入学员姓名：')
        age = int(input('请输入学员年龄：'))
        mobile = input('请输入学员电话号码：')
        # 把输入的信息组装成一个对象添加到列表中
        self.students.append(Student(name,age, mobile))
        print('恭喜您信息录入成功')

    # 定义删除学员信息的函数
    def del_student(self):
        name = input('请输入需要删除的学员名字：')
        for i in self.students:
            if i.name == name:
                self.students.remove(i)
                print(f'{name}的信息已删除')
                break
            else:
                print(f'没有{name}的信息')

    # 定义修改学员信息函数
    def edit_student(self):
        name = input('请输入要修改的学员名字：')
        for i in self.students:
            if i.name == name:
                i.name = input('请输入修改后的学员名字：')
                i.age = int(input('请输入修改后的学员年龄：'))
                i.mobile = input('请输入修改后的学员电话：')
                print('恭喜您修改成功')
                break
            else:
                print('没有此学员信息')

    # 定义查找学员信息函数
    def find_student(self):
        name = input('请输入要查找的学员信息：')
        for i in self.students:
            if i.name == name:
                print(i)
                break
            else:
                print('没有此学员信息')

    # 定义遍历学员信息的函数
    def show_student(self):
        for i in self.students:
            print(i)

    # 定义保存数据到文件的函数
    def save_student(self):
        f = open('studet.txt','w',encoding='utf-8')
        # 把对象转换成字典（不然保存的是对象地址），并且为了不影响self.students属性，所以定义一个新的变量
        students_data = [i.__dict__ for i in self.students]
        f.write(str(students_data)) #d 注意：f.write()只能把字符串类型的数据写入到文件
        f.close()
        print('完成数据保存')

    # 定义加载文件数据的函数
    def load_data(self):
        f = open('studet.txt','r',encoding='utf-8')
        content = f.read()
        if not content:
            return
        data = ast.literal_eval(content)
        # 把加载的文件数据，由字典转为对象
        self.students = [Student(i['name'], i['age'], i['mobile']) for i in data]

    # 定义一个启动方法，运行系统
    def start(self):
        # 加载文件中的数据
        self.load_data()
        # 1、给系统添加一个while True，让系统一直运行下去
        while True:
            # 2、打印系统菜单
            self.menu()
            # 3、提示用户输入要执行的功能
            user_num = int(input('请输入要执行的功能：'))
            if user_num == 1:
                self.add_student()
            elif user_num == 2:
                self.del_student()
            elif user_num == 3:
                self.edit_student()
            elif user_num == 4:
                self.find_student()
            elif user_num == 5:
                self.show_student()
            elif user_num == 6:
                self.save_student()
            elif user_num == 7:
                print('退出系统成功，感谢使用小伟管理系统')
                break
            else:
                print('你的输入有误，请重新输入')
